package com.ynkbny.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ynkbny.domain.FormulaConfiguration;
import com.ynkbny.domain.dto.ArgumentDeviceAddDTO;
import com.ynkbny.domain.dto.FormulaConfigurationAddDTO;
import com.ynkbny.domain.pojo.FormulaConfigurationArgumentVO;
import com.ynkbny.util.Res;

import java.util.List;
import java.util.Map;

/**
* @author YY
* @description 针对表【formula_configuration(公式表)】的数据库操作Service
* @createDate 2023-09-04 20:28:57
*/
public interface FormulaConfigurationService extends IService<FormulaConfiguration> {

    /**
     * 添加公式
     * @Author YY
     * @param formulaConfigurationAddDTO FormulaConfigurationAddDTO
     * @return boolean
     */
    boolean add(FormulaConfigurationAddDTO formulaConfigurationAddDTO);

    /**
     * 修改公式
     * @Author YY
     * @param formulaConfigurationAddDTO FormulaConfigurationAddDTO
     * @return boolean
     */
    boolean update(FormulaConfigurationAddDTO formulaConfigurationAddDTO);

    /**
     * 删除公式
     * @Author YY
     * @param dataCollectConfigureId 采集数据项id
     * @return Res<Object>
     */
    Res<Object> delete(String dataCollectConfigureId);

    /**
     * 查询公式列表
     * @Author YY
     * @param enterpriseCode 企业统一信用代码
     * @return List<FormulaConfigurationArgumentVO>
     */
    List<FormulaConfigurationArgumentVO> selectFormulaList(String enterpriseCode);

    /**
     * 查询一个公式
     * @Author YY
     * @param dataCollectConfigureId 采集数配置项id
     * @return FormulaConfigurationAddDTO
     */
    FormulaConfigurationAddDTO getOneFormula(String dataCollectConfigureId);

    /**
     * 套用公式计算
     * @Author YY
     * @param dataCollectConfigureId 采集配置项id
     * @param deviceDataMap 设备id和数据的映射
     * @return 公式计算结果
     */
    Double countDataFormulaList(String dataCollectConfigureId, Map<String,Double> deviceDataMap);

    /**
     * 通过采集数配置项id查询该公式涉及的所有设备
     * @Author YY
     * @param dataCollectConfigureId 采集配置项id
     * @return 该公式涉及的所有设备列表
     */
    List<ArgumentDeviceAddDTO> getFormulaAllDevice(String dataCollectConfigureId);
}
